合并/连接

pd.merge(left, right, how = 'inner', on = None, left_on = None, right_on = None, left_index = False, right_index = False, sort = True)

参数 说明
left DataFrame对象
right 另一个 DataFrame对象
how left/right/inner 其中一个
on 列连接
left_on 来自左侧 DataFrame 中的列作为键
right_on 来自右侧 DataFrame 中的列作为键
left_index 如果为 True,则使用左侧 DataFrame 中的索引作为其连接键
right_index 同 left_index 用法 相同
sort 按照字典顺序通过连接键对结果 DataFrame进行排序

1> 合并一个键上的两个 DataFrame

left = pd.DataFrame({'id':[1, 2, 3],
                    'name':['meng', 'zhi', 'wang'],
                    'number':['1001','1003','1004']})
right = pd.DataFrame({'id':[1, 2, 4],
                    'name':['li', 'zhang', 'ming'],
                    'number':['1021','1203','1064']})

print(f'左 DataFrame:\n{left}')

# 输出结果:
#  左 DataFrame:
#     id  name number
#  0   1  meng   1001
#  1   2   zhi   1003
#  2   3  wang   1004

print(f'右 DataFrame:\n{right}')

# 输出结果:
#  右 DataFrame:
#     id   name number
#  0   1     li   1021
#  1   2  zhang   1203
#  2   4   ming   1064

rs = pd.merge(left,right, on = 'id')
print(f'通过 id 合并 DataFrame:\n{rs}')

# 输出结果:
#  通过 id 合并 DataFrame:
#     id name_x number_x name_y number_y
#  0   1   meng     1001     li     1021
#  1   2    zhi     1003  zhang     1203

2> 合并多个键上的 DataFrame

left = pd.DataFrame({'id':[1, 2, 3],
                    'name':['meng', 'zhi', 'wang'],
                    'number':['1001','1003','1004']})
right = pd.DataFrame({'id':[1, 2, 4],
                    'name':['li', 'zhang', 'ming'],
                    'number':['1001','1003','1064']})

print(f'左 DataFrame:\n{left}')

# 输出结果:
#  左 DataFrame:
#     id  name number
#  0   1  meng   1001
#  1   2   zhi   1003
#  2   3  wang   1004

print(f'右 DataFrame:\n{right}')

# 输出结果:
#  右 DataFrame:
#     id   name number
#  0   1     li   1001
#  1   2  zhang   1003
#  2   4   ming   1064

rs = pd.merge(left,right, on = ['id','number'])
print(f'通过 id,number 合并 DataFrame:\n{rs}')

# 输出结果:
#  通过 id,number 合并 DataFrame:
#     id name_x number name_y
#  0   1   meng   1001     li
#  1   2    zhi   1003  zhang

3> 使用 how 参数

参数 说明
left 使用左侧对象的键
right 使用右侧对象的键
outer 使用键的联合
inner 使用键的交集
left = pd.DataFrame({'id':[1, 2, 3],
                    'name':['meng', 'zhi', 'wang'],
                    'number':['1001','1003','1004']})
right = pd.DataFrame({'id':[1, 2, 4],
                    'name':['li', 'zhang', 'ming'],
                    'number':['1001','1003','1064']})

print(f'左 DataFrame:\n{left}')

# 输出结果:
#  左 DataFrame:
#     id  name number
#  0   1  meng   1001
#  1   2   zhi   1003
#  2   3  wang   1004

print(f'右 DataFrame:\n{right}')

# 输出结果:
#  右 DataFrame:
#     id   name number
#  0   1     li   1001
#  1   2  zhang   1003
#  2   4   ming   1064

rs1 = pd.merge(left,right, on = 'number', how = 'left')
print(f'left join 结果:\n{rs1}')

# 输出结果:
#  left join 结果:
#     id_x name_x number  id_y name_y
#  0     1   meng   1001   1.0     li
#  1     2    zhi   1003   2.0  zhang
#  2     3   wang   1004   NaN    NaN

rs2 = pd.merge(left,right, on = 'number', how = 'right')
print(f'right join 结果:\n{rs2}')

# 输出结果:
#  right join 结果:
#     id_x name_x number  id_y name_y
#  0   1.0   meng   1001     1     li
#  1   2.0    zhi   1003     2  zhang
#  2   NaN    NaN   1064     4   ming